        <!DOCTYPE html>
        <html>
        <head>
                <meta charset="utf-8">
        <title>FrictionJoint class / box2d_console Library / Dart Documentation</title>
        <link rel="stylesheet" type="text/css"
            href="../styles.css">
        <link href="http://fonts.googleapis.com/css?family=Open+Sans:400,600,700,800" rel="stylesheet" type="text/css">
        <link rel="shortcut icon" href="../favicon.ico">
        
        </head>
        <body data-library="box2d_console" data-type="FrictionJoint">
        <div class="page">
        <div class="header">
          <a href="../index.html"><div class="logo"></div></a>
          <a href="../index.html">Dart Documentation</a>
         &rsaquo; <a href="../box2d_console.html">box2d_console</a> &rsaquo; <a href="../box2d_console/FrictionJoint.html">FrictionJoint</a>        <div id="search-box">
          <input type="search" name="q" id="q" autocomplete="off"
              class="search-input" placeholder="Search API">
        </div>
        
      </div>
      <div class="drop-down" id="drop-down"></div>
      
        <div class="nav">
        
</div>
<div class="content">
        <h2><strong>FrictionJoint</strong>
          class
        </h2>
        
<button id="show-inherited" class="show-inherited">Hide inherited</button>
<div class="doc">
<pre class="source">
class FrictionJoint extends Joint {
  final Vector _localAnchorA;
  final Vector _localAnchorB;

  Vector _linearImpulse;
  num _angularImpulse;
  num _maxForce;
  num _maxTorque;

  FrictionJoint(FrictionJointDef def)
      : super(def),
        _localAnchorA = new Vector.copy(def.localAnchorA),
        _localAnchorB = new Vector.copy(def.localAnchorB),
        _linearImpulse = new Vector(),
        _angularImpulse = 0.0,
        _maxForce = def.maxForce,
        _maxTorque = def.maxTorque { }

  Vector getLocalAnchorA(Vector argOut) {
    bodyA.getWorldPointToOut(_localAnchorA, argOut);
  }

  Vector getLocalAnchorB(Vector argOut) {
    bodyB.getWorldPointToOut(_localAnchorB, argOut);
  }

  void getReactionForce(num inv_dt, Vector argOut) {
    argOut.setFrom(_linearImpulse).mulLocal(inv_dt);
  }

  num getReactionTorque(num inv_dt) =&gt; inv_dt * _angularImpulse;

  void set maxForce(num force) {
    assert(force &gt;= 0.0);
    _maxForce = force;
  }

  num get maxForce() =&gt; _maxForce;

  void set maxTorque(num torque) {
    assert(torque &gt;= 0.0);
    _maxTorque = torque;
  }

  num get maxTorque() =&gt; _maxTorque;

  void initVelocityConstraints(TimeStep step) {
    // Compute the effective mass matrix.
    Vector r1 = new Vector();
    Vector r2 = new Vector();

    r1.setFrom(_localAnchorA).subLocal(bodyA.localCenter);
    r2.setFrom(_localAnchorB).subLocal(bodyB.localCenter);
    Matrix22.mulMatrixAndVectorToOut(bodyA.originTransform.rotation, r1, r1);
    Matrix22.mulMatrixAndVectorToOut(bodyB.originTransform.rotation, r2, r2);

    // J = [-I -r1_skew I r2_skew]
    // [ 0 -1 0 1]
    // r_skew = [-ry; rx]

    // Matlab
    // K = [ mA+r1y^2*iA+mB+r2y^2*iB, -r1y*iA*r1x-r2y*iB*r2x, -r1y*iA-r2y*iB]
    // [ -r1y*iA*r1x-r2y*iB*r2x, mA+r1x^2*iA+mB+r2x^2*iB, r1x*iA+r2x*iB]
    // [ -r1y*iA-r2y*iB, r1x*iA+r2x*iB, iA+iB]

    Matrix22 K = new Matrix22();
    K.col1.x = bodyA.invMass + bodyB.invMass +
               bodyA.invInertia * r1.y * r1.y + bodyB.invInertia * r2.y * r2.y;
    K.col1.y = -bodyA.invInertia * r1.x * r1.y - bodyB.invInertia * r2.x * r2.y;
    K.col2.x = K.col1.y;
    K.col2.y = bodyA.invMass + bodyB.invMass +
               bodyA.invInertia * r1.x * r1.x + bodyB.invInertia * r2.x * r2.x;

    Matrix22 linearMass = new Matrix22();
    linearMass.setFrom(K);
    linearMass.invertLocal();

    num angularMass = bodyA.invInertia + bodyB.invInertia;
    if (angularMass &gt; 0.0) {
      angularMass = 1.0 / angularMass;
    }

    if (step.warmStarting) {
      // Scale impulses.
      _linearImpulse.mulLocal(step.dtRatio);
      _angularImpulse *= step.dtRatio;

      Vector P = new Vector();
      P.setFrom(_linearImpulse);

      bodyA.linearVelocity.x -= bodyA.invMass * P.x;
      bodyA.linearVelocity.y -= bodyA.invMass * P.y;
      bodyA.angularVelocity -= bodyA.invInertia * (Vector.crossVectors(r1, P) + _angularImpulse);

      bodyB.linearVelocity.x += bodyB.invMass * P.x;
      bodyB.linearVelocity.y += bodyB.invMass * P.y;
      bodyB.angularVelocity += bodyB.invInertia * (Vector.crossVectors(r2, P) + _angularImpulse);
    } else {
      _linearImpulse.setZero();
      _angularImpulse = 0.0;
    }
  }

  void solveVelocityConstraints(TimeStep step) {
    // Solve angular friction
    {
      final num Cdot = bodyB.angularVelocity - bodyA.angularVelocity;
      num angularMass = bodyA.invInertia + bodyB.invInertia;
      if (angularMass &gt; 0.0) {
        angularMass = 1.0 / angularMass;
      }
      num impulse = -angularMass * Cdot;

      final num oldImpulse = _angularImpulse;
      final num maxImpulse = step.dt * _maxTorque;
      _angularImpulse = MathBox.clamp(_angularImpulse + impulse, -maxImpulse, maxImpulse);
      impulse = _angularImpulse - oldImpulse;

      bodyA.angularVelocity -= bodyA.invInertia * impulse;
      bodyB.angularVelocity += bodyB.invInertia * impulse;
    }

    // Solve linear friction
    {
      Vector r1 = new Vector();
      Vector r2 = new Vector();

      r1.setFrom(_localAnchorA).subLocal(bodyA.localCenter);
      r2.setFrom(_localAnchorB).subLocal(bodyB.localCenter);
      Matrix22.mulMatrixAndVectorToOut(bodyA.originTransform.rotation, r1, r1);
      Matrix22.mulMatrixAndVectorToOut(bodyB.originTransform.rotation, r2, r2);

      Vector temp = new Vector();
      Vector Cdot = new Vector();

      Vector.crossNumAndVectorToOut(bodyA.angularVelocity, r1, temp);
      Vector.crossNumAndVectorToOut(bodyB.angularVelocity, r2, Cdot);

      Cdot.addLocal(bodyB.linearVelocity).subLocal(bodyA.linearVelocity).subLocal(temp);

      Matrix22 K = new Matrix22();
      K.col1.x = bodyA.invMass + bodyB.invMass +
                 bodyA.invInertia * r1.y * r1.y + bodyB.invInertia * r2.y * r2.y;
      K.col1.y = -bodyA.invInertia * r1.x * r1.y - bodyB.invInertia * r2.x * r2.y;
      K.col2.x = K.col1.y;
      K.col2.y = bodyA.invMass + bodyB.invMass +
                 bodyA.invInertia * r1.x * r1.x + bodyB.invInertia * r2.x * r2.x;

      Matrix22 linearMass = new Matrix22();
      linearMass.setFrom(K);
      linearMass.invertLocal();

      Vector impulse = new Vector();
      Matrix22.mulMatrixAndVectorToOut(linearMass, Cdot, impulse);
      impulse.negateLocal();

      Vector oldImpulse = new Vector();
      oldImpulse.setFrom(_linearImpulse);
      _linearImpulse.addLocal(impulse);

      num maxImpulse = step.dt * _maxForce;
      if (_linearImpulse.lengthSquared &gt; maxImpulse * maxImpulse) {
        _linearImpulse.normalize();
        _linearImpulse.mulLocal(maxImpulse);
      }

      impulse.setFrom(_linearImpulse).subLocal(oldImpulse);

      bodyA.linearVelocity.x -= impulse.x * bodyA.invMass;
      bodyA.linearVelocity.y -= impulse.y * bodyA.invMass;
      bodyA.angularVelocity -= bodyA.invInertia * Vector.crossVectors(r1, impulse);

      bodyB.linearVelocity.x += impulse.x * bodyB.invMass;
      bodyB.linearVelocity.y += impulse.y * bodyB.invMass;
      bodyB.angularVelocity += bodyB.invInertia * Vector.crossVectors(r2, impulse);
    }
  }

  bool solvePositionConstraints(num baumgarte) =&gt; true;
}
</pre>
</div>
<h3>Extends</h3>
<p>
<span class="type-box"><span class="icon-class"></span><a href="../box2d_console/Joint.html">Joint</a></span>&nbsp;&gt;&nbsp;<span class="type-box"><span class="icon-class"></span><strong>FrictionJoint</strong></span></p>
<div>
<h3>Constructors</h3>
<div class="method"><h4 id="FrictionJoint">
<button class="show-code">Code</button>
new <strong>FrictionJoint</strong>(<a href="../box2d_console/FrictionJointDef.html">FrictionJointDef</a> def) <a class="anchor-link" href="#FrictionJoint"
              title="Permalink to FrictionJoint.FrictionJoint">#</a></h4>
<div class="doc">
<pre class="source">
FrictionJoint(FrictionJointDef def)
    : super(def),
      _localAnchorA = new Vector.copy(def.localAnchorA),
      _localAnchorB = new Vector.copy(def.localAnchorB),
      _linearImpulse = new Vector(),
      _angularImpulse = 0.0,
      _maxForce = def.maxForce,
      _maxTorque = def.maxTorque { }
</pre>
</div>
</div>
</div>
<div>
<h3>Properties</h3>
<div class="field inherited"><h4 id="active">
<button class="show-code">Code</button>
final bool         <strong>active</strong> <a class="anchor-link"
            href="#active"
            title="Permalink to FrictionJoint.active">#</a>
        </h4>
        <div class="inherited-from">inherited from <a href="../box2d_console/Joint.html">Joint</a> </div><div class="doc">
<p>Short-cut function to determine if either body is inactive.</p>
<pre class="source">
bool get active() {
  return bodyA.active &amp;&amp; bodyB.active;
}
</pre>
</div>
</div>
<div class="field inherited"><h4 id="bodyA">
<button class="show-code">Code</button>
<a href="../box2d_console/Body.html">Body</a>         <strong>bodyA</strong> <a class="anchor-link"
            href="#bodyA"
            title="Permalink to FrictionJoint.bodyA">#</a>
        </h4>
        <div class="inherited-from">inherited from <a href="../box2d_console/Joint.html">Joint</a> </div><div class="doc">
<pre class="source">
Body bodyA;
</pre>
</div>
</div>
<div class="field inherited"><h4 id="bodyB">
<button class="show-code">Code</button>
<a href="../box2d_console/Body.html">Body</a>         <strong>bodyB</strong> <a class="anchor-link"
            href="#bodyB"
            title="Permalink to FrictionJoint.bodyB">#</a>
        </h4>
        <div class="inherited-from">inherited from <a href="../box2d_console/Joint.html">Joint</a> </div><div class="doc">
<pre class="source">
Body bodyB;
</pre>
</div>
</div>
<div class="field inherited"><h4 id="collideConnected">
<button class="show-code">Code</button>
bool         <strong>collideConnected</strong> <a class="anchor-link"
            href="#collideConnected"
            title="Permalink to FrictionJoint.collideConnected">#</a>
        </h4>
        <div class="inherited-from">inherited from <a href="../box2d_console/Joint.html">Joint</a> </div><div class="doc">
<pre class="source">
bool collideConnected;
</pre>
</div>
</div>
<div class="field inherited"><h4 id="edgeA">
<button class="show-code">Code</button>
<a href="../box2d_console/JointEdge.html">JointEdge</a>         <strong>edgeA</strong> <a class="anchor-link"
            href="#edgeA"
            title="Permalink to FrictionJoint.edgeA">#</a>
        </h4>
        <div class="inherited-from">inherited from <a href="../box2d_console/Joint.html">Joint</a> </div><div class="doc">
<pre class="source">
JointEdge edgeA;
</pre>
</div>
</div>
<div class="field inherited"><h4 id="edgeB">
<button class="show-code">Code</button>
<a href="../box2d_console/JointEdge.html">JointEdge</a>         <strong>edgeB</strong> <a class="anchor-link"
            href="#edgeB"
            title="Permalink to FrictionJoint.edgeB">#</a>
        </h4>
        <div class="inherited-from">inherited from <a href="../box2d_console/Joint.html">Joint</a> </div><div class="doc">
<pre class="source">
JointEdge edgeB;
</pre>
</div>
</div>
<div class="field inherited"><h4 id="invIA">
<button class="show-code">Code</button>
num         <strong>invIA</strong> <a class="anchor-link"
            href="#invIA"
            title="Permalink to FrictionJoint.invIA">#</a>
        </h4>
        <div class="inherited-from">inherited from <a href="../box2d_console/Joint.html">Joint</a> </div><div class="doc">
<pre class="source">
num invIA;
</pre>
</div>
</div>
<div class="field inherited"><h4 id="invIB">
<button class="show-code">Code</button>
num         <strong>invIB</strong> <a class="anchor-link"
            href="#invIB"
            title="Permalink to FrictionJoint.invIB">#</a>
        </h4>
        <div class="inherited-from">inherited from <a href="../box2d_console/Joint.html">Joint</a> </div><div class="doc">
<pre class="source">
num invIB;
</pre>
</div>
</div>
<div class="field inherited"><h4 id="invMassA">
<button class="show-code">Code</button>
num         <strong>invMassA</strong> <a class="anchor-link"
            href="#invMassA"
            title="Permalink to FrictionJoint.invMassA">#</a>
        </h4>
        <div class="inherited-from">inherited from <a href="../box2d_console/Joint.html">Joint</a> </div><div class="doc">
<pre class="source">
num invMassA;
</pre>
</div>
</div>
<div class="field inherited"><h4 id="invMassB">
<button class="show-code">Code</button>
num         <strong>invMassB</strong> <a class="anchor-link"
            href="#invMassB"
            title="Permalink to FrictionJoint.invMassB">#</a>
        </h4>
        <div class="inherited-from">inherited from <a href="../box2d_console/Joint.html">Joint</a> </div><div class="doc">
<pre class="source">
num invMassB;
</pre>
</div>
</div>
<div class="field inherited"><h4 id="islandFlag">
<button class="show-code">Code</button>
bool         <strong>islandFlag</strong> <a class="anchor-link"
            href="#islandFlag"
            title="Permalink to FrictionJoint.islandFlag">#</a>
        </h4>
        <div class="inherited-from">inherited from <a href="../box2d_console/Joint.html">Joint</a> </div><div class="doc">
<pre class="source">
bool islandFlag;
</pre>
</div>
</div>
<div class="field inherited"><h4 id="localCenterA">
<button class="show-code">Code</button>
final <a href="../box2d_console/Vector.html">Vector</a>         <strong>localCenterA</strong> <a class="anchor-link"
            href="#localCenterA"
            title="Permalink to FrictionJoint.localCenterA">#</a>
        </h4>
        <div class="inherited-from">inherited from <a href="../box2d_console/Joint.html">Joint</a> </div><div class="doc">
<pre class="source">
final Vector localCenterA;
</pre>
</div>
</div>
<div class="field inherited"><h4 id="localCenterB">
<button class="show-code">Code</button>
final <a href="../box2d_console/Vector.html">Vector</a>         <strong>localCenterB</strong> <a class="anchor-link"
            href="#localCenterB"
            title="Permalink to FrictionJoint.localCenterB">#</a>
        </h4>
        <div class="inherited-from">inherited from <a href="../box2d_console/Joint.html">Joint</a> </div><div class="doc">
<pre class="source">
final Vector localCenterB;
</pre>
</div>
</div>
<div class="field"><h4 id="maxForce">
<button class="show-code">Code</button>
num         <strong>maxForce</strong> <a class="anchor-link"
            href="#maxForce"
            title="Permalink to FrictionJoint.maxForce">#</a>
        </h4>
        <div class="doc">
<pre class="source">
num get maxForce() =&gt; _maxForce;
</pre>
<pre class="source">
void set maxForce(num force) {
  assert(force &gt;= 0.0);
  _maxForce = force;
}
</pre>
</div>
</div>
<div class="field"><h4 id="maxTorque">
<button class="show-code">Code</button>
num         <strong>maxTorque</strong> <a class="anchor-link"
            href="#maxTorque"
            title="Permalink to FrictionJoint.maxTorque">#</a>
        </h4>
        <div class="doc">
<pre class="source">
num get maxTorque() =&gt; _maxTorque;
</pre>
<pre class="source">
void set maxTorque(num torque) {
  assert(torque &gt;= 0.0);
  _maxTorque = torque;
}
</pre>
</div>
</div>
<div class="field inherited"><h4 id="runtimeType">
<button class="show-code">Code</button>
final Type         <strong>runtimeType</strong> <a class="anchor-link"
            href="#runtimeType"
            title="Permalink to FrictionJoint.runtimeType">#</a>
        </h4>
        <div class="inherited-from">inherited from Object </div><div class="doc">
<p>A representation of the runtime type of the object.</p>
<pre class="source">
external Type get runtimeType;
</pre>
</div>
</div>
<div class="field inherited"><h4 id="type">
<button class="show-code">Code</button>
int         <strong>type</strong> <a class="anchor-link"
            href="#type"
            title="Permalink to FrictionJoint.type">#</a>
        </h4>
        <div class="inherited-from">inherited from <a href="../box2d_console/Joint.html">Joint</a> </div><div class="doc">
<pre class="source">
int type;
</pre>
</div>
</div>
<div class="field inherited"><h4 id="userData">
<button class="show-code">Code</button>
Object         <strong>userData</strong> <a class="anchor-link"
            href="#userData"
            title="Permalink to FrictionJoint.userData">#</a>
        </h4>
        <div class="inherited-from">inherited from <a href="../box2d_console/Joint.html">Joint</a> </div><div class="doc">
<pre class="source">
Object userData;
</pre>
</div>
</div>
</div>
<div>
<h3>Operators</h3>
<div class="method inherited"><h4 id="==">
<button class="show-code">Code</button>
bool <strong>operator ==</strong>(other) <a class="anchor-link" href="#=="
              title="Permalink to FrictionJoint.operator ==">#</a></h4>
<div class="inherited-from">inherited from Object </div><div class="doc">
<p>The equality operator.</p>
<p>The default behavior for all <code>Object</code>s is to return true if and
only if <code>this</code> and 
<span class="param">other</span> are the same object.</p>
<p>If a subclass overrides the equality operator it should override
the <code>hashCode</code> method as well to maintain consistency.</p>
<pre class="source">
bool operator ==(other) =&gt; identical(this, other);
</pre>
</div>
</div>
</div>
<div>
<h3>Methods</h3>
<div class="method inherited"><h4 id="destructor">
<button class="show-code">Code</button>
void <strong>destructor</strong>() <a class="anchor-link" href="#destructor"
              title="Permalink to FrictionJoint.destructor">#</a></h4>
<div class="inherited-from">inherited from <a href="../box2d_console/Joint.html">Joint</a> </div><div class="doc">
<p>Override to handle destruction of joint</p>
<pre class="source">
void destructor() { }
</pre>
</div>
</div>
<div class="method"><h4 id="FrictionJoint">
<button class="show-code">Code</button>
new <strong>FrictionJoint</strong>(<a href="../box2d_console/FrictionJointDef.html">FrictionJointDef</a> def) <a class="anchor-link" href="#FrictionJoint"
              title="Permalink to FrictionJoint.FrictionJoint">#</a></h4>
<div class="doc">
<pre class="source">
FrictionJoint(FrictionJointDef def)
    : super(def),
      _localAnchorA = new Vector.copy(def.localAnchorA),
      _localAnchorB = new Vector.copy(def.localAnchorB),
      _linearImpulse = new Vector(),
      _angularImpulse = 0.0,
      _maxForce = def.maxForce,
      _maxTorque = def.maxTorque { }
</pre>
</div>
</div>
<div class="method inherited"><h4 id="getAnchorA">
<button class="show-code">Code</button>
void <strong>getAnchorA</strong>(<a href="../box2d_console/Vector.html">Vector</a> argOut) <a class="anchor-link" href="#getAnchorA"
              title="Permalink to FrictionJoint.getAnchorA">#</a></h4>
<div class="inherited-from">inherited from <a href="../box2d_console/Joint.html">Joint</a> </div><div class="doc">
<p>Get the anchor point on bodyA in world coordinates.</p>
<pre class="source">
void getAnchorA(Vector argOut) { }
</pre>
</div>
</div>
<div class="method inherited"><h4 id="getAnchorB">
<button class="show-code">Code</button>
void <strong>getAnchorB</strong>(<a href="../box2d_console/Vector.html">Vector</a> argOut) <a class="anchor-link" href="#getAnchorB"
              title="Permalink to FrictionJoint.getAnchorB">#</a></h4>
<div class="inherited-from">inherited from <a href="../box2d_console/Joint.html">Joint</a> </div><div class="doc">
<p>Get the anchor point on bodyB in world coordinates.</p>
<pre class="source">
void getAnchorB(Vector argOut) { }
</pre>
</div>
</div>
<div class="method"><h4 id="getLocalAnchorA">
<button class="show-code">Code</button>
<a href="../box2d_console/Vector.html">Vector</a> <strong>getLocalAnchorA</strong>(<a href="../box2d_console/Vector.html">Vector</a> argOut) <a class="anchor-link" href="#getLocalAnchorA"
              title="Permalink to FrictionJoint.getLocalAnchorA">#</a></h4>
<div class="doc">
<pre class="source">
Vector getLocalAnchorA(Vector argOut) {
  bodyA.getWorldPointToOut(_localAnchorA, argOut);
}
</pre>
</div>
</div>
<div class="method"><h4 id="getLocalAnchorB">
<button class="show-code">Code</button>
<a href="../box2d_console/Vector.html">Vector</a> <strong>getLocalAnchorB</strong>(<a href="../box2d_console/Vector.html">Vector</a> argOut) <a class="anchor-link" href="#getLocalAnchorB"
              title="Permalink to FrictionJoint.getLocalAnchorB">#</a></h4>
<div class="doc">
<pre class="source">
Vector getLocalAnchorB(Vector argOut) {
  bodyB.getWorldPointToOut(_localAnchorB, argOut);
}
</pre>
</div>
</div>
<div class="method"><h4 id="getReactionForce">
<button class="show-code">Code</button>
void <strong>getReactionForce</strong>(num inv_dt, <a href="../box2d_console/Vector.html">Vector</a> argOut) <a class="anchor-link" href="#getReactionForce"
              title="Permalink to FrictionJoint.getReactionForce">#</a></h4>
<div class="doc">
<div class="inherited">
<p>Get the reaction force on body2 at the joint anchor in Newtons.</p>
<div class="docs-inherited-from">docs inherited from <a href="../box2d_console/Joint.html">Joint</a> </div></div>
<pre class="source">
void getReactionForce(num inv_dt, Vector argOut) {
  argOut.setFrom(_linearImpulse).mulLocal(inv_dt);
}
</pre>
</div>
</div>
<div class="method"><h4 id="getReactionTorque">
<button class="show-code">Code</button>
num <strong>getReactionTorque</strong>(num inv_dt) <a class="anchor-link" href="#getReactionTorque"
              title="Permalink to FrictionJoint.getReactionTorque">#</a></h4>
<div class="doc">
<div class="inherited">
<p>Get the reaction torque on body2 in N*m.</p>
<div class="docs-inherited-from">docs inherited from <a href="../box2d_console/Joint.html">Joint</a> </div></div>
<pre class="source">
num getReactionTorque(num inv_dt) =&gt; inv_dt * _angularImpulse;
</pre>
</div>
</div>
<div class="method inherited"><h4 id="hashCode">
<button class="show-code">Code</button>
int <strong>hashCode</strong>() <a class="anchor-link" href="#hashCode"
              title="Permalink to FrictionJoint.hashCode">#</a></h4>
<div class="inherited-from">inherited from Object </div><div class="doc">
<p>Get a hash code for this object.</p>
<p>All objects have hash codes. Hash codes are guaranteed to be the
same for objects that are equal when compared using the equality
operator <code>==</code>. Other than that there are no guarantees about
the hash codes. They will not be consistent between runs and
there are no distribution guarantees.</p>
<p>If a subclass overrides <code>hashCode</code> it should override the
equality operator as well to maintain consistency.</p>
<pre class="source">
external int hashCode();
</pre>
</div>
</div>
<div class="method"><h4 id="initVelocityConstraints">
<button class="show-code">Code</button>
void <strong>initVelocityConstraints</strong>(<a href="../box2d_console/TimeStep.html">TimeStep</a> step) <a class="anchor-link" href="#initVelocityConstraints"
              title="Permalink to FrictionJoint.initVelocityConstraints">#</a></h4>
<div class="doc">
<pre class="source">
void initVelocityConstraints(TimeStep step) {
  // Compute the effective mass matrix.
  Vector r1 = new Vector();
  Vector r2 = new Vector();

  r1.setFrom(_localAnchorA).subLocal(bodyA.localCenter);
  r2.setFrom(_localAnchorB).subLocal(bodyB.localCenter);
  Matrix22.mulMatrixAndVectorToOut(bodyA.originTransform.rotation, r1, r1);
  Matrix22.mulMatrixAndVectorToOut(bodyB.originTransform.rotation, r2, r2);

  // J = [-I -r1_skew I r2_skew]
  // [ 0 -1 0 1]
  // r_skew = [-ry; rx]

  // Matlab
  // K = [ mA+r1y^2*iA+mB+r2y^2*iB, -r1y*iA*r1x-r2y*iB*r2x, -r1y*iA-r2y*iB]
  // [ -r1y*iA*r1x-r2y*iB*r2x, mA+r1x^2*iA+mB+r2x^2*iB, r1x*iA+r2x*iB]
  // [ -r1y*iA-r2y*iB, r1x*iA+r2x*iB, iA+iB]

  Matrix22 K = new Matrix22();
  K.col1.x = bodyA.invMass + bodyB.invMass +
             bodyA.invInertia * r1.y * r1.y + bodyB.invInertia * r2.y * r2.y;
  K.col1.y = -bodyA.invInertia * r1.x * r1.y - bodyB.invInertia * r2.x * r2.y;
  K.col2.x = K.col1.y;
  K.col2.y = bodyA.invMass + bodyB.invMass +
             bodyA.invInertia * r1.x * r1.x + bodyB.invInertia * r2.x * r2.x;

  Matrix22 linearMass = new Matrix22();
  linearMass.setFrom(K);
  linearMass.invertLocal();

  num angularMass = bodyA.invInertia + bodyB.invInertia;
  if (angularMass &gt; 0.0) {
    angularMass = 1.0 / angularMass;
  }

  if (step.warmStarting) {
    // Scale impulses.
    _linearImpulse.mulLocal(step.dtRatio);
    _angularImpulse *= step.dtRatio;

    Vector P = new Vector();
    P.setFrom(_linearImpulse);

    bodyA.linearVelocity.x -= bodyA.invMass * P.x;
    bodyA.linearVelocity.y -= bodyA.invMass * P.y;
    bodyA.angularVelocity -= bodyA.invInertia * (Vector.crossVectors(r1, P) + _angularImpulse);

    bodyB.linearVelocity.x += bodyB.invMass * P.x;
    bodyB.linearVelocity.y += bodyB.invMass * P.y;
    bodyB.angularVelocity += bodyB.invInertia * (Vector.crossVectors(r2, P) + _angularImpulse);
  } else {
    _linearImpulse.setZero();
    _angularImpulse = 0.0;
  }
}
</pre>
</div>
</div>
<div class="method inherited"><h4 id="Joint">
<button class="show-code">Code</button>
new <strong>Joint</strong>(<a href="../box2d_console/JointDef.html">JointDef</a> def) <a class="anchor-link" href="#Joint"
              title="Permalink to FrictionJoint.Joint">#</a></h4>
<div class="inherited-from">inherited from <a href="../box2d_console/Joint.html">Joint</a> </div><div class="doc">
<pre class="source">
Joint(JointDef def) :
  type = def.type,
  _prev = null,
  _next = null,
  bodyA = def.bodyA,
  bodyB = def.bodyB,
  collideConnected = def.collideConnected,
  islandFlag = false,
  userData = def.userData,

  localCenterA = new Vector(),
  localCenterB = new Vector(),
  edgeA = new JointEdge(),
  edgeB = new JointEdge() { }
</pre>
</div>
</div>
<div class="method inherited"><h4 id="Joint.create">
<button class="show-code">Code</button>
factory <strong>Joint.create</strong>(<a href="../box2d_console/World.html">World</a> argWorld, <a href="../box2d_console/JointDef.html">JointDef</a> def) <a class="anchor-link" href="#Joint.create"
              title="Permalink to FrictionJoint.Joint.create">#</a></h4>
<div class="inherited-from">inherited from <a href="../box2d_console/Joint.html">Joint</a> </div><div class="doc">
<pre class="source">
factory Joint.create(World argWorld, JointDef def) {
  switch(def.type){
    case JointType.MOUSE:
      throw new NotImplementedException();
      //  return new MouseJoint(def);
    case JointType.DISTANCE:
      return new DistanceJoint(def);
    case JointType.PRISMATIC:
      throw new NotImplementedException();
      //  return new PrismaticJoint(def);
    case JointType.REVOLUTE:
      return new RevoluteJoint(def);
    case JointType.WELD:
      throw new NotImplementedException();
      //return new WeldJoint(def);
    case JointType.FRICTION:
      return new FrictionJoint(def);
    case JointType.LINE:
      throw new NotImplementedException();
      //return new LineJoint(def);
    case JointType.GEAR:
      throw new NotImplementedException();
      //return new GearJoint(def);
    case JointType.PULLEY:
      throw new NotImplementedException();
      //return new PulleyJoint(def);
    case JointType.CONSTANT_VOLUME:
      return new ConstantVolumeJoint(argWorld, def);
  }
  return null;
}
</pre>
</div>
</div>
<div class="method inherited"><h4 id="noSuchMethod">
<button class="show-code">Code</button>
<strong>noSuchMethod</strong>(String name, List args) <a class="anchor-link" href="#noSuchMethod"
              title="Permalink to FrictionJoint.noSuchMethod">#</a></h4>
<div class="inherited-from">inherited from Object </div><div class="doc">
<p><code>noSuchMethod</code> is invoked when users invoke a non-existant method
on an object. The name of the method and the arguments of the
invocation are passed to <code>noSuchMethod</code>. If <code>noSuchMethod</code>
returns a value, that value becomes the result of the original
invocation.</p>
<p>The default behavior of <code>noSuchMethod</code> is to throw a
<code>noSuchMethodError</code>.</p>
<pre class="source">
external Dynamic noSuchMethod(String name, List args);
</pre>
</div>
</div>
<div class="method inherited"><h4 id="Object">
<button class="show-code">Code</button>
const <strong>Object</strong>() <a class="anchor-link" href="#Object"
              title="Permalink to FrictionJoint.Object">#</a></h4>
<div class="inherited-from">inherited from Object </div><div class="doc">
<p>Creates a new <code>Object</code> instance.</p>
<p><code>Object</code> instances have no meaningful state, and are only useful
through their identity. An <code>Object</code> instance is equal to itself
only.</p>
<pre class="source">
const Object();
</pre>
</div>
</div>
<div class="method"><h4 id="solvePositionConstraints">
<button class="show-code">Code</button>
bool <strong>solvePositionConstraints</strong>(num baumgarte) <a class="anchor-link" href="#solvePositionConstraints"
              title="Permalink to FrictionJoint.solvePositionConstraints">#</a></h4>
<div class="doc">
<div class="inherited">
<p>This returns true if the position errors are within tolerance.</p>
<div class="docs-inherited-from">docs inherited from <a href="../box2d_console/Joint.html">Joint</a> </div></div>
<pre class="source">
bool solvePositionConstraints(num baumgarte) =&gt; true;
</pre>
</div>
</div>
<div class="method"><h4 id="solveVelocityConstraints">
<button class="show-code">Code</button>
void <strong>solveVelocityConstraints</strong>(<a href="../box2d_console/TimeStep.html">TimeStep</a> step) <a class="anchor-link" href="#solveVelocityConstraints"
              title="Permalink to FrictionJoint.solveVelocityConstraints">#</a></h4>
<div class="doc">
<pre class="source">
void solveVelocityConstraints(TimeStep step) {
  // Solve angular friction
  {
    final num Cdot = bodyB.angularVelocity - bodyA.angularVelocity;
    num angularMass = bodyA.invInertia + bodyB.invInertia;
    if (angularMass &gt; 0.0) {
      angularMass = 1.0 / angularMass;
    }
    num impulse = -angularMass * Cdot;

    final num oldImpulse = _angularImpulse;
    final num maxImpulse = step.dt * _maxTorque;
    _angularImpulse = MathBox.clamp(_angularImpulse + impulse, -maxImpulse, maxImpulse);
    impulse = _angularImpulse - oldImpulse;

    bodyA.angularVelocity -= bodyA.invInertia * impulse;
    bodyB.angularVelocity += bodyB.invInertia * impulse;
  }

  // Solve linear friction
  {
    Vector r1 = new Vector();
    Vector r2 = new Vector();

    r1.setFrom(_localAnchorA).subLocal(bodyA.localCenter);
    r2.setFrom(_localAnchorB).subLocal(bodyB.localCenter);
    Matrix22.mulMatrixAndVectorToOut(bodyA.originTransform.rotation, r1, r1);
    Matrix22.mulMatrixAndVectorToOut(bodyB.originTransform.rotation, r2, r2);

    Vector temp = new Vector();
    Vector Cdot = new Vector();

    Vector.crossNumAndVectorToOut(bodyA.angularVelocity, r1, temp);
    Vector.crossNumAndVectorToOut(bodyB.angularVelocity, r2, Cdot);

    Cdot.addLocal(bodyB.linearVelocity).subLocal(bodyA.linearVelocity).subLocal(temp);

    Matrix22 K = new Matrix22();
    K.col1.x = bodyA.invMass + bodyB.invMass +
               bodyA.invInertia * r1.y * r1.y + bodyB.invInertia * r2.y * r2.y;
    K.col1.y = -bodyA.invInertia * r1.x * r1.y - bodyB.invInertia * r2.x * r2.y;
    K.col2.x = K.col1.y;
    K.col2.y = bodyA.invMass + bodyB.invMass +
               bodyA.invInertia * r1.x * r1.x + bodyB.invInertia * r2.x * r2.x;

    Matrix22 linearMass = new Matrix22();
    linearMass.setFrom(K);
    linearMass.invertLocal();

    Vector impulse = new Vector();
    Matrix22.mulMatrixAndVectorToOut(linearMass, Cdot, impulse);
    impulse.negateLocal();

    Vector oldImpulse = new Vector();
    oldImpulse.setFrom(_linearImpulse);
    _linearImpulse.addLocal(impulse);

    num maxImpulse = step.dt * _maxForce;
    if (_linearImpulse.lengthSquared &gt; maxImpulse * maxImpulse) {
      _linearImpulse.normalize();
      _linearImpulse.mulLocal(maxImpulse);
    }

    impulse.setFrom(_linearImpulse).subLocal(oldImpulse);

    bodyA.linearVelocity.x -= impulse.x * bodyA.invMass;
    bodyA.linearVelocity.y -= impulse.y * bodyA.invMass;
    bodyA.angularVelocity -= bodyA.invInertia * Vector.crossVectors(r1, impulse);

    bodyB.linearVelocity.x += impulse.x * bodyB.invMass;
    bodyB.linearVelocity.y += impulse.y * bodyB.invMass;
    bodyB.angularVelocity += bodyB.invInertia * Vector.crossVectors(r2, impulse);
  }
}
</pre>
</div>
</div>
<div class="method inherited"><h4 id="toString">
<button class="show-code">Code</button>
String <strong>toString</strong>() <a class="anchor-link" href="#toString"
              title="Permalink to FrictionJoint.toString">#</a></h4>
<div class="inherited-from">inherited from Object </div><div class="doc">
<p>Returns a string representation of this object.</p>
<pre class="source">
external String toString();
</pre>
</div>
</div>
</div>
        </div>
        <div class="clear"></div>
        </div>
        
        <div class="footer">
          
        </div>
        <script async src="../client-live-nav.js"></script>
        </body></html>
        
